home *** CD-ROM | disk | FTP | other *** search
- REM -=<MENU>=-
- REM
- REM SUBROUTINE TO CREATE SCROLLING-BAR MENU'S IN QUICKBASIC 2.0
- REM
- REM BY SCOTT L. BAIN
- REM 12/10/86
- REM
- REM
- REM DESCRIPTION:
- REM ----------- PROGRAM CREATES A VERTICAL MENU, THEN USING THE ARROW
- REM AND ENTER KEYS, USER MAY SELECT ITEM FROM THOSE LISTED
- REM IN STRING ARRAY. PGUP, PGDN, HOME, END, AND WRAP-AROUND
- REM ARE ALL SUPPORTED. USER MAY ALTERNATIVELY PRESS THE
- REM FIRST LETTER OF A CHOICE TO SELECT IT.
- REM
- REM SAMPLE CALL:
- REM ----------- CALL MENU(AR$,UR,MR,FC,BC,CH)
- REM
- REM PARAMETERS:
- REM ---------- AR$- ONE DIMENSIONAL ARRAY, CONTAINING CHOICE STRINGS
- REM UR - UPPER ROW (1-24)
- REM MR - MARGIN (1-79)
- REM FC - FOREGROUND COLOR
- REM BC - BACKGROUND COLOR
- REM CH - CHOICE (INITIAL CHOICE/RETURNED CHOICE VALUE)
- REM
- REM IF THE ZEROETH ELEMENT OF AR$ IS NOT EMPTY, THEN THE CONTENTS WILL BE
- REM USED AS A CENTERED TITLE, ASSUMING THAT AT LEAST ONE BLANK SCREEN LINE IS
- REM AVAILABLE ABOVE THE MENU. THE TITLE WILL BE WRITTEN IN THE COLOR AS SET
- REM BEFORE ENTERING THE MENU ROUTINE (NOT FC,BC).
- REM ---
- REM NOTE: DUE TO A QB 2.0 BUG, DO NOT USE OPTION BASE 1 IN THE CALLING PROG.
- REM IF NO TITLES ARE DESIRED, SIMPLY LEAVE ELEMENT 0 EMPTY ("").
-
- SUB MENU (AR$(1),UR,MR,FC,BC,CH) STATIC
-
- REM - PHASE I: TEST PARAMETERS FOR VALIDITY
- IF UBOUND(AR$)<1 THEN GOTO BAD
- IF MR>79 THEN GOTO BAD
- IF UR+UBOUND(AR$)>24 THEN GOTO BAD
- IF FC<0 OR FC>31 OR FC<>INT(FC) THEN GOTO BAD
- IF BC<0 OR BC>15 OR BC<>INT(BC) THEN GOTO BAD
-
- REM - PHASE II: BUILD
- LN=0
- FOR I=0 TO UBOUND(AR$)
- IF LEN(AR$(I))>LN THEN LN=LEN(AR$(I))
- NEXT I
- IF LBOUND(AR$)=0 THEN
- IF AR$(0)<>"" AND UR<>1 THEN
- LOCATE UR-1,MR+((LN-LEN(AR$(0)))/2)
- PRINT AR$(0);
- END IF
- END IF
- COLOR FC,BC
- FOR I=1 TO UBOUND(AR$)
- LOCATE UR+I-1,MR
- A$=AR$(I)
- AR$(I)=A$+STRING$(LN-LEN(A$),32)
- PRINT AR$(I);
- NEXT I
-
- REM - PHASE III: GET THE CHOICE
- CHOOSING=1
- OLD=CH
- WHILE CHOOSING=1
- COLOR FC,BC
- LOCATE UR+OLD-1,MR
- PRINT AR$(OLD);
- COLOR 12,0
- LOCATE UR+CH-1,MR
- PRINT AR$(CH);
- OLD=CH
- A$=""
- WHILE A$="":A$=INKEY$:WEND
- IF LEN(A$)=2 THEN A=ASC(RIGHT$(A$,1)) ELSE A=ASC(A$)
- IF A=13 OR A=27 THEN CHOOSING=0
- IF LEN(A$)=1 THEN
- FOR J=UBOUND(AR$) TO 1 STEP -1
- IF A=ASC(AR$(J)) THEN
- CH=J
- COLOR FC,BC
- LOCATE UR+OLD-1,MR
- PRINT AR$(OLD);
- COLOR 12,0
- LOCATE UR+CH-1,MR
- PRINT AR$(CH);
- CHOOSING=0
- END IF
- NEXT J
- ELSE
- IF A=72 OR A=56 THEN
- CH=CH-1
- ELSEIF A=80 OR A=50 THEN
- CH=CH+1
- ELSEIF A=71 OR A=73 OR A=55 OR A=57 THEN
- CH=1
- ELSEIF A=79 OR A=81 OR A=49 OR A=51 THEN
- CH=UBOUND(AR$)
- END IF
- END IF
- IF CH>UBOUND(AR$) THEN CH=1
- IF CH<1 THEN CH=UBOUND(AR$)
- WEND
- GOTO DONE:
-
- BAD:
- PRINT "BAD PARAMETER(S) IN MENU CALL"
- A$=INPUT$(1)
-
- DONE:
- COLOR FC,BC
- END SUB
-
-
-
-
-